public class PlayerAbilityState : PlayerState
{
    protected bool _isAbilityDone;

    private bool _isGrounded;

    public PlayerAbilityState(Player player, PlayerSM stateMachine, PlayerData playerData, string animBoolName,
        Core core) : base(player, stateMachine, playerData, animBoolName, core)
    {
    }

    public override void DoChecks()
    {
        base.DoChecks();

        _isGrounded = _core.Collision.Grounded;
    }

    public override void Enter()
    {
        base.Enter();
        _isAbilityDone = false;
    }

    public override void Exit()
    {
        base.Exit();
    }

    public override void LogicUpdate()
    {
        base.LogicUpdate();

        if (_isAbilityDone) //�������л��ٶȸϲ��ϳ����ִ���ٶ�
        {
            if (_isGrounded && _core.Movement.CurrentVelocity.y < 0.01f)
                _stateMachine.ChangeState(_player.IdleState);
            else
                _stateMachine.ChangeState(_player.InAirState);
        }
    }

    public override void PhysicsUpdate()
    {
        base.PhysicsUpdate();
    }
}